var fs = require('fs')
var dbPath = './db.json'


function getList(callback) {
    fs.readFile(dbPath, 'utf8', function (err, data) {
        if (err) {
            return callback(err)
        }
        callback(null, JSON.parse(data).students)
    })
}

function addList(newStu, callback) {
    fs.readFile(dbPath, 'utf8', function (err, data) {
        if (err) {
            return callback(err)
        }
        var students = JSON.parse(data).students
        newStu.id = students[students.length - 1].id + 1
        students.push(newStu)
        fs.writeFile(dbPath, JSON.stringify({
            students: students
        }), function (err) {
            if (err) {
                return callback(err)
            }
            callback(null)
        })
    })
}

function getStuByid(queryid, callback) {
    fs.readFile(dbPath, 'utf-8', function (err, data) {
        if (err) {
            return callback(err)
        }
        var students = JSON.parse(data).students
        var stu = {}
        students.map((item) => {
            item.id === queryid ? stu = item : null
        });
        callback(null, stu)
    })

}

function editList(editInfo, callback) {
    fs.readFile(dbPath, 'utf-8', function (err, data) {
        if (err) {
            return callback(err)
        }
        var students = JSON.parse(data).students
        var stu = {}
        students.map((item) => {
            item.id === parseInt(editInfo.id) ? stu = item : null
        });
        for (var key in editInfo) {
            stu[key] = editInfo[key]
        }
        // 把对象数据转换为字符串
        var fileData = JSON.stringify({
            students: students
        })
        // 把字符串保存到文件中
        fs.writeFile(dbPath, fileData, function (err) {
            if (err) {
                // 错误就是把错误对象传递给它
                return callback(err)
            }
            // 成功就没错，所以错误对象是 null
            callback(null)
        })
    })
}

function deleteList(id, callback) {
    fs.readFile(dbPath, 'utf-8', function (err, data) {
        if (err) {
            return callback(err)
        }
        var students = JSON.parse(data).students
        var stu = -1
        students.map((item, i) => {
            item.id == parseInt(id) ? stu = i : null
        })
        students.splice(parseInt(stu), 1)

        var fileData = JSON.stringify({
            students: students
        })

        fs.writeFile(dbPath, fileData, function (err) {
            if (err) {
                callback(err)
            }
            callback(null)
        })
    })
}

module.exports = {
    getList,
    addList,
    editList,
    getStuByid,
    deleteList
}